package com.yonyougov.devops.cruxcisupport.user;

import com.yonyougov.devops.cruxcisupport.user.vo.UserInfoVo;
import com.yonyougov.devops.cruxcisupport.user.vo.UserMailVo;
import com.yonyougov.devops.cruxcisupport.user.vo.UserPageLikeDto;
import com.yonyougov.devops.cruxcisupport.user.vo.UserPageLikeVo;
import com.yonyougov.devops.fwc.core.entity.Pagination;
import com.yonyougov.devops.fwc.core.service.BaseService;

import java.math.BigInteger;
import java.util.List;
import java.util.Map;

/**
 * t_user服务
 */
public interface UserService extends BaseService<UserEntity, BigInteger> {
    //<!--用户自定义代码开始-->

    /**
     * 模糊分页查询
     *
     * @param userPageLikeDto 模糊分页查询Dto
     * @return Pagination<UserPageLikeVo>
     */
    Pagination<UserPageLikeVo> findByPageLike(UserPageLikeDto userPageLikeDto);

    /**
     * 根据用户id查询用户公钥
     *
     * @param userId 用户id
     * @return 用户公钥(String)
     */
    String findPublicKeyByUserId(BigInteger userId);

    /**
     * 更新用户公钥
     *
     * @param userEntity
     */
    void updatePubKey(UserEntity userEntity);

    /**
     * 获取当前用户实体
     *
     * @return
     */
    UserEntity getCurrentUser();

    /**
     * 邮箱列表
     * @return List<UserMailVo>
     */
    List<UserMailVo> mailList();

    /**
     * 用户登陆接口
     *
     * @param userName 用户名称
     * @param password 用户密码
     * @return Map<String, Object>
     */
    Map<String, Object> login(String userName, String password);

    /**
     * 用户新增或更新
     *
     * @param userEntity 用户实体
     */
    void save(UserEntity userEntity);

    /**
     * 删除一个用户,同时删除该用户和角色的关系
     *
     * @param userEntity 用户实体
     */
    void deleteOneUser(UserEntity userEntity);

    /**
     * 获取当前登录的用户信息
     *
     * @return com.yonyougov.devops.cruxcisupport.user.vo.UserInfoRespVo
     */
    UserInfoVo findCurrentUserInfoVo();
    //<!--用户自定义代码结束-->
}
